package cn.xkai.exercise.c;

/**
 * @description: 反转字符串中的元音字母
 * 给你一个字符串 s ，仅反转字符串中的所有元音字母，并返回结果字符串。
 * 元音字母包括 'a'、'e'、'i'、'o'、'u'，且可能以大小写两种形式出现。
 * 自己的思路：对撞指针
 * @author: kaixiang
 * @date: 2022-07-29
 **/
public class Solution111 {
    public static String reverseVowels(String s) {
        char[] chars = s.toCharArray();
        char[] sources = new char[] {'a', 'e', 'i', 'o', 'u'};
        int left = 0, right = s.length() - 1;
        while (left < right) {
            while (left < right) {
                if (contains(sources, chars[left])) {
                    break;
                }
                left++;
            }
            while (left < right) {
                if (contains(sources, chars[right])) {
                    break;
                }
                right--;
            }
            if (left >= right) {
                break;
            }
            chars[left] = (char) (chars[left] ^ chars[right]);
            chars[right] = (char) (chars[left] ^ chars[right]);
            chars[left] = (char) (chars[left] ^ chars[right]);
            left++;
            right--;
        }
        return new String(chars);
    }

    public static boolean contains(char[] chars, char target) {
        for (char c : chars) {
            if (c == target || c == target + 32) {
                return true;
            }
        }
        return false;
    }

    public static void main(String[] args) {
        String s = "leetcodE";
        System.out.println(reverseVowels(s));
    }
}
